package com.shop.web.aspect;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.util.Map;

@Data
public class HttpLogRequestParam {

    /**
     * 客户端系统类型 如 iOS、Android、H5
     */
    @JSONField(ordinal = 20)
    private String clientType;

    /**
     * 客户端系统类型 如 iOS 12.0.1
     */
    @JSONField(ordinal = 30)
    private String clientModel;

    /**
     * 客户端版本号 如 v1.0.1
     */
    @JSONField(ordinal = 40)
    private String clientVersion;

    /**
     * 客户端唯一标识
     */
    @JSONField(ordinal = 50)
    private String clientId;

    /**
     * 请求唯一标识，后端系统自动生成
     */
    @JSONField(ordinal = 60)
    private String requestId;

    /**
     * 请求时间戳
     */
    @JSONField(ordinal = 70)
    private String requestTimestamp;

    /**
     * 请求地址
     */
    @JSONField(ordinal = 80)
    private String requestUri;

    /**
     * 请求IP
     */
    @JSONField(ordinal = 90)
    private String requestIp;

    /**
     * 请求头域信息
     */
    @JSONField(ordinal = 100)
    private Map<String, String> requestHeaders;

    /**
     * 请求Body
     */
    @JSONField(ordinal = 110)
    private String requestBody;

    /**
     * form表单请求参数
     */
    @JSONField(ordinal = 120)
    private Map<String, String[]> requestParameters;

    /**
     * 应答数据
     */
    @JSONField(ordinal = 130)
    private String responseValue;

    /**
     * 响应时长
     */
    @JSONField(ordinal = 140)
    private String responseTime;

    /**
     * 系统异常日志
     */
    @JSONField(ordinal = 150)
    private String exceptionMsg;


    public String toJsonStringRemovingCRLF() {
        return lineSplicing(JSON.toJSONString(this));
    }

    private String lineSplicing(String lines) {
        return lines == null ? null : lines.replaceAll("\n", " ").replaceAll("\r", " ");
    }

}
